/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.softcomputo.decodificador.impl;

import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.MemoryImageSource;

import com.softcomputo.decodificador.DicomReader;
import com.softcomputo.decodificador.DicomReaderH;
import com.softcomputo.decodificador.util.DecodificadorUtils;

/**
 *
 * @author EvanSandryHB
 */
public class DicomReaderImpl implements DicomReader {
  
    private boolean indicado;
    private boolean ignoreNegValues;
    private DicomReaderH dicomReaderH;

    public DicomReaderImpl(DicomReaderH dicomReaderH) {
        this.dicomReaderH = dicomReaderH;
        indicado = DecodificadorUtils.isIndicado(dicomReaderH);
    }

    
    public Image getImagen() throws Exception{
       if (dicomReaderH.getWidth() > 2048) {
            //System.Out.Println("imagen > 2048");
            return DecodificadorUtils.escalarImagen(dicomReaderH.getN(), dicomReaderH.getHeigth(), dicomReaderH.getWidth(), dicomReaderH.getData(), indicado, dicomReaderH.getBitsAllocated(), dicomReaderH.getHighBit(), ignoreNegValues);
        }

        ColorModel cm = DecodificadorUtils.modeloColorGris();
        if (dicomReaderH.getN() == 1) {
            //System.Out.Println("n = 1");
            return Toolkit.getDefaultToolkit().createImage(new MemoryImageSource(dicomReaderH.getWidth(), dicomReaderH.getHeigth(), cm, dicomReaderH.getData(), 0, dicomReaderH.getWidth()));

        }else if (!indicado) {
             //System.Out.Println("no es indicado");
            byte[] destPixels = DecodificadorUtils.to8PerPix(dicomReaderH.getData(), dicomReaderH.getWidth(), dicomReaderH.getHeigth(), dicomReaderH.getBitsAllocated(), dicomReaderH.getHighBit());
            return Toolkit.getDefaultToolkit().createImage(new MemoryImageSource(dicomReaderH.getWidth(), dicomReaderH.getHeigth(), cm, destPixels, 0, dicomReaderH.getWidth()));
        }else{
             //System.Out.Println("es indicado");
            byte[] destPixels = DecodificadorUtils.indicadoTo8PerPix(dicomReaderH.getData(), dicomReaderH.getWidth(), dicomReaderH.getHeigth(), dicomReaderH.getHighBit(), ignoreNegValues);
            return Toolkit.getDefaultToolkit().createImage(new MemoryImageSource(dicomReaderH.getWidth(), dicomReaderH.getHeigth(), cm, destPixels, 0, dicomReaderH.getWidth()));
        }
    }
    
    public DicomReaderH getDicomReaderH() {
        return dicomReaderH;
    }

    public BufferedImage getImagenBuffer() throws Exception{
        return  DecodificadorUtils.toBufferedImage(getImagen());
    }
    	 
}
